# 编写一个学校管理系统
# 1. 管理员登录
# 2. 增删改查老师信息
# 3. 增删改查学生信息
# 4. 用一个文件保存管理员登录账号信息
# 5. 用一个文件保存老师信息
# 6. 用一个文件保存学生信息
# 7 主流程写在run()中
# school = SchoolSystem()
# school.run()

# 登录功能
class Sign_in():
    def sign(self):
        mode = int(input('请选择登录类型（1.注册2.登录）：'))
        if mode == 1:                                  # 将注册的用户名和用户密码保存在文件中
            register_name = input('请输入用户名：')
            register_password = input('请输入用户密码：')
            f = open('D:\\Python练习文件\\register_name.text','w')
            f.write(f'{register_name}')
            f = open('D:\\Python练习文件\\register_password.text', 'w')
            f.write(f'{register_password}')
        elif mode == 2:                                         # 登录 输入用户名和密码
            user_name = input('请输入用户名：')
            user_password = input('请输入用户密码：')
            f_name = open('D:\\Python练习文件\\register_name.text', 'r')
            f_password = open('D:\\Python练习文件\\register_password.text','r')
            while True:
                if user_name == f_name.read() and user_password == f_password.read():
                    print('登录成功！请选择操作对象')
                    break
                elif user_name != f_name.read() or user_password != f_password.read():
                    print('用户名和密码错误请重新输入！')





    # 查询学生信息
    def search(self):
        number = input('请输入需要查询学生的学号：')
        print('学号' + '\t\t\t' + '姓名' + '\t\t\t' + '语文' + '\t\t\t' + '数学' + '\t\t\t' + '外语' + '\t\t\t')
        for student in self.students:
            if student['学号'] == number:
                print(student['学号'] + '\t\t' + student['姓名'] + '\t\t\t' + student['语文'] + '\t\t\t' + student['数学'] + '\t\t\t' + student['外语'])

    # 保存学生信息
    def save(self):
        f = open('D:\\Python练习文件\\学生成绩信息.txt', 'w')      # 创建一个学生信息管理文件
        for student in self.students:                          # 遍历内存中的联系人信息
            f.write(f'{student["学号"]},{student["姓名"]},{student["语文"]},{student["数学"]},{student["外语"]}\n')
        f.close()

# 学校系统类
class SchoolSystem():

    # 初始化定义
    def __init__(self):
        self.admins = {}        # 默认设置一个空字典来存放管理者们的信息
        admin_information = open('D:\\Python练习文件\\admins_informationa.text', 'r')    # 打开存储管理者的信息的文件，且打开方式为读取模式
        admin_information_all = admin_information.read()                    # 将管理者信息全部提取出来（包括逗号和换行符）
        admin_information_all_split = admin_information_all.split('\n')     # 将管理者的信息按‘行标记符’进行分割
        for i in range(len(admin_information_all_split)):
            admins_name = admin_information_all_split[i].split(',')         # 将每一个管理者的名字析出  且分割成新的列表
            self.admins[admins_name[0]] = admins_name[1]                    # 构造管理者字典 中的组键值对 admins_name[0]代表每一个管理者的用户名  admins_name[1]代表每一个管理者的密码
        print(self.admins)
        admin_information.close()

    # 主程序
    def run(self):
         print('欢迎使用X战警学校管理系统')

        # 用户登录
         self.login()
        # 信息操作的循环处理
         self.printMenu()        # 先打印菜单
         while True:
             sel = int(input('请选择需要执行的对象:'))
             if sel == 1:                    #选择1 表示对老师的信息进行修改
                self.modifyteacher()
             if sel == 2:                    #选择2 表示对学生的信息进行修改
                self.modifystudent()
             if sel == 3:                    #选择3 表示退出该系统
                print('欢迎您再次使用X战警学校管理系统!')
                break

    # 登录封装
    def login(self):
        t = int(input('请输入登录模式（1.新用户注册 2.老用户登录）：'))
        if t == 1:
            user_name = input('请输入新用户名：')
            user_password = input('请输入密码：')
            f = open('D:\\Python练习文件\\admins_informationa.text','a')
            f.write('\n'+f'{user_name}'+','+f'{user_password}')
            f.close()

            self.admins = {}  # 默认设置一个空字典来存放管理者们的信息
            admin_information = open('D:\\Python练习文件\\admins_informationa.text', 'r')  # 打开存储管理者的信息的文件，且打开方式为读取模式
            admin_information_all = admin_information.read()  # 将管理者信息全部提取出来（包括逗号和换行符）
            admin_information_all_split = admin_information_all.split('\n')  # 将管理者的信息按‘行标记符’进行分割
            for i in range(len(admin_information_all_split)):
                admins_name = admin_information_all_split[i].split(',')  # 将每一个管理者的名字析出  且分割成新的列表
                self.admins[admins_name[0]] = admins_name[1]  # 构造管理者字典 中的组键值对 admins_name[0]代表每一个管理者的用户名  admins_name[1]代表每一个管理者的密码
            print(self.admins)
            admin_information.close()

            while True:
                user_name = input('请输入用户名：')
                user_password = input('请输入密码：')
                if self.admins[user_name] == user_password:
                    print('用户登录成功!请选择操作对象:')
                    return True       # 注意 return是可以返回值并直接结束所在循环
                print('用户名或密码错误，请重新登录!')
        elif t == 2:
            # self.admins = {}  # 默认设置一个空字典来存放管理者们的信息
            # admin_information = open('D:\\Python练习文件\\admins_informationa.text', 'r')  # 打开存储管理者的信息的文件，且打开方式为读取模式
            # admin_information_all = admin_information.read()  # 将管理者信息全部提取出来（包括逗号和换行符）
            # admin_information_all_split = admin_information_all.split('\n')  # 将管理者的信息按‘行标记符’进行分割
            # for i in range(len(admin_information_all_split)):
            #     admins_name = admin_information_all_split[i].split(',')  # 将每一个管理者的名字析出  且分割成新的列表
            #     self.admins[admins_name[0]] = admins_name[1]  # 构造管理者字典 中的组键值对 admins_name[0]代表每一个管理者的用户名  admins_name[1]代表每一个管理者的密码
            # print(self.admins)
            # admin_information.close()

            while True:
                user_name = input('请输入用户名：')
                user_password = input('请输入密码：')
                if self.admins[user_name] == user_password:
                    print('用户登录成功!请选择操作对象:')
                    return True       # 注意 return是可以返回值并直接结束所在循环
                print('用户名或密码错误，请重新登录!')

    # 打印操作对象的菜单
    def printMenu(self):
        print('1.管理老师信息')
        print('2.管理学生信息')
        print('3.退出系统')

    # 老师信息操作封装
    def modifyteacher(self):
        self.teachers = []
        # 打印对老师信息处理的菜单
        print('操作信息如下：')
        print('1.添加老师信息')
        print('2.删除老师信息')
        print('3.更改老师信息')
        print('4.查询老师信息')
        print('5.结束操作')
        while True:
            sel = int(input('请输入需要操作的类型：'))
            if sel == 1:         # 添加老师信息
                number = input('请输入老师的工号：')
                name = input('请输入老师的姓名：')
                gender = input('请输入老师的性别：')
                self.teachers.append({'工号': number, '姓名': name, '性别': gender})
            elif sel == 2:       # 删除老师信息
                number = input('请输入需要老师的工号：')
                for teacher in self.teachers:
                    if teacher['工号'] == number:
                        self.teachers.remove(teacher)
            elif sel == 3:       # 更改老师信息
                number = input('请输入需要修改的老师工号：')
                name = input('请输入老师的姓名：')
                gender = input('请输入老师的性别：')
                for teacher in self.teachers:
                    if teacher['工号'] == number:
                        teacher['姓名'] = name
                        teacher['性别'] = gender
                        break
            elif sel == 4:       # 查询老师信息
                number = input('请输入需要查询老师的工号：')
                print('工号' + '\t\t\t' + '姓名' + '\t\t\t' + '性别' + '\t\t\t')
                for teacher in self.teachers:
                    if teacher['工号'] == number:
                        print(teacher['工号'] + '\t\t' + teacher['姓名'] + '\t\t\t' + teacher['性别'] + '\t\t\t')
            elif sel == 5:     # 结束操作
                break

    # 对学生信息操纵封装
    def modifystudent(self):
        self.students = []
        # 打印学生信息处理的菜单
        print('操作信息如下：')
        print('1.添加学生信息')
        print('2.删除学生信息')
        print('3.更改学生信息')
        print('4.查询学生信息')
        print('5.结束操作')
        while True:
            sel = int(input('请输入需要操作的类型：'))
            if sel == 1:         # 添加学生信息
                number = input('请输入学生学号：')
                name = input('请输入学生姓名：')
                chineseGrade = input('请输入学生语文成绩：')
                mathGrade = input('请输入学生数学成绩：')
                englishGrade = input('请输入学生外语成绩：')
                self.students.append( {'学号': number, '姓名': name, '语文': chineseGrade, '数学': mathGrade, '外语': englishGrade})
            elif sel == 2:       # 删除学生信息
                number = input('请输入需要删除学生的学号：')
                for student in self.students:
                    if student['学号'] == number:
                        self.students.remove(student)
            elif sel == 3:       # 更改学生信息
                number = input('请输入需要修改的学生学号：')
                name = input('请输入需要修改的学生的姓名：')
                chiese = input('请输入需要修改的学生的语文成绩：')
                math = input('请输入需要修改的学生的数学成绩：')
                english = input('请输入需要修改的学生的英语成绩：')
                for student in self.students:
                    if student['学号'] == number:
                        student['姓名'] = name
                        student['语文'] = chiese
                        student['数学'] = math
                        student['外语'] = english
                        break
            elif sel == 4:       # 查询学生信息
                number = input('请输入需要查询学生的学号：')
                print('学号' + '\t\t\t' + '姓名' + '\t\t\t' + '语文' + '\t\t\t' + '数学' + '\t\t\t' + '外语' + '\t\t\t')
                for student in self.students:
                    if student['学号'] == number:
                        print(student['学号'] + '\t\t' + student['姓名'] + '\t\t\t' + student['语文'] + '\t\t\t' + student['数学'] + '\t\t\t' + student['外语'])
            elif sel == 5:     # 结束操作
                break

school = SchoolSystem()
school.run()


